home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
zbpc_460.zip
/
GAMES.EXE
/
LIFE.BAS
< prev
Wrap
BASIC Source File
|
1990-06-16
|
3KB
|
77 lines
00010 CLS : PRINT TAB(18); "LIFE" : GOSUB "INSTRUCTIONS"
00020 H = 70 : V = 22 : X1 = 1 : Y1 = 1 : X2 = V : Y2 = H
00030 DIM A(22,70), 80 B$(22), UBOUND(10) : C = 0 : G = 1
00040 DO
00050 C = C + 1
00060 LINE INPUT "-> "; B$(C)
00070 A$ = UCASE$(B$(C))
00080 UNTIL A$ = "DONE" OR C = 22
00090 B$(C) = "" : C = C - 1
00100 CLS
00110 FOR X = 1 TO C - 1
00120 IF LEN(B$(X)) > L THEN L = LEN(B$(X))
00130 NEXT X
00140 ' FIND EDGES OF COLONY
00150 X1 = INT((V-X)/2)
00160 Y1 = INT((H-L)/2)
00170 ' COUNT POPULATION
00180 FOR X = 1 TO C
00190 FOR Y = 1 TO LEN(B$(X))
00200 A$ = MID$(B$(X),Y,1)
00210 IF A$ <> " " THEN A(X1+X,Y1+Y) = 1 : P = P + 1
00220 NEXT Y
00230 NEXT X
00240 ' PRINT OUT SCREEN
00250 WHILE LEN(INKEY$) = 0
00260 LOCATE 0,0 : CLS LINE
00270 PRINT "GENERATION:"; G; " POPULATION:"; P;: IF I9 THEN PRINT " INVALID";
00280 X3 = V : Y3 = H : X4 = 1 : Y4 = 1
00290 G = G + 1
00300 FOR X = 1 TO X1 - 1 : PRINT : NEXT X : REM BLANK LINES ABOVE COLONY
00310 FOR X = X1 TO X2 : REM VERTICAL AREA OF THE COLONY
00320 PRINT : CLS LINE
00330 FOR Y = Y1 TO Y2 : REM HORIZONTAL AREA OF THE COLONY
00340 IF A(X,Y) = 2 THEN A(X,Y) = 0 : GOTO 420
00350 IF A(X,Y) = 3 THEN A(X,Y) = 1 : GOTO 370
00360 IF A(X,Y) <> 1 THEN 420
00370 PRINT TAB(Y); "*";: ' PRINT ONE CELL
00380 IF X < X3 THEN X3 = X
00390 IF X > X4 THEN X4 = X
00400 IF Y < Y3 THEN Y3 = Y
00410 IF Y > Y4 THEN Y4 = Y
00420 NEXT Y
00430 NEXT X
00440 IF P = 0 THEN "QUIT"
00450 ' EVOLVE & CHECK FOR GROWTH PAST EDGES
00460 X1 = X3 : X2 = X4 : Y1 = Y3 : Y2 = Y4
00470 IF X1 < 3 THEN X1 = 3 : I9 = -1
00480 IF X2 > (V-2) THEN X2 = (V-2) : I9 = -1
00490 IF Y1 < 3 THEN Y1 = 3 : I9 = -1
00500 IF Y2 > (H-2) THEN Y2 = (H-2) : I9 = -1
00510 P = 0
00520 FOR X = X1 - 1 TO X2 + 1
00530 FOR Y = Y1 - 1 TO Y2 + 1
00540 C = 0
00550 FOR I = X - 1 TO X + 1
00560 FOR J = Y - 1 TO Y + 1
00570 IF A(I,J) = 1 OR A(I,J) = 2 THEN C = C + 1
00580 NEXT J
00590 NEXT I
00600 LONG IF A(X,Y) = 0
00610 IF C = 3 THEN A(X,Y) = 3 : P = P + 1
00620 XELSE
00630 IF C < 3 OR C > 4 THEN A(X,Y) = 2 ELSE P = P + 1
00640 END IF
00650 NEXT Y
00660 NEXT X
00670 X1 = X1 - 1 : Y1 = Y1 - 1 : X2 = X2 + 1 : Y2 = Y2 + 1
00680 WEND : ' LOOP UNTIL NO POPULATION OR KEYPRESS
00690 "QUIT" END
00700 "INSTRUCTIONS"
00710 PRINT : PRINT "ENTER A STARTING DESIGN OF ASTERISKS."
00720 PRINT "USE A MAXIMUM OF ONE LINE,"
00730 PRINT " PRESS 'RETURN' TO END THE LINE."
00740 PRINT "BE SURE CAPS LOCK IS ON,"
00750 PRINT " AND ENTER 'DONE' WHEN YOU ARE READY."
00760 PRINT : RETURN